package rxjava
// 手写RxjavaDemo
fun main() {
    // 首先create是个匿名表达式 最后一行就是返回的值
    create {
        "123"
    }.map {
        // map的输入源 就是map的输出源
        it.toInt()
    }.map {
        "你的值为$it"
    }.observer {
        // 只需要把上面输入的内容 打印输出即可 所以不用管输出
        println(it)
    }
}


// 中转站: 保存我们的记录
class RxJavaCoreClassObject<T>(val valueItem: T) {
    // 主构造 接收你传递进来的信息 此信息就是create最后一行的返回
    // valueItem == create操作符 最后一行的返回值 流向了此处
    // 封装更多的操作符
}

inline fun <I, O> RxJavaCoreClassObject<I>.map(mapAction: (I) -> O) = RxJavaCoreClassObject(mapAction(valueItem))

/**
 * create 输入源 没有任何参数 给你 你是输出就行(万能类型)
 */
inline fun <T> create(action: () -> T) = RxJavaCoreClassObject(action())

inline fun <INPUT> RxJavaCoreClassObject<INPUT>.observer(observerAction: (INPUT) -> Unit)  = observerAction(valueItem)
